package com.example.lettcode._202411._20241115;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/*
349. 两个数组的交集
给定两个数组 nums1 和 nums2 ，返回 它们的交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。

示例 1：
输入：nums1 = [1,2,2,1], nums2 = [2,2]
输出：[2]

示例 2：
输入：nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出：[9,4]
解释：[4,9] 也是可通过的
 */
public class _02_liang_ge_shu_zu_de_jiao_ji {

    public static void main(String[] args) {
        int[] num1 = {4,7,9,7,6,7}, num2 = {5,0,0,6,1,6,2,2,4};
        int[] intersection = intersection(num1, num2);
        Arrays.stream(intersection).forEach(System.out::println);
    }

    public static int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();

        for (int i : nums1) {
            set.add(i);
        }

        Set<Integer> ret = new HashSet<>();
        for (int i : nums2) {
            if (set.contains(i)) {
                ret.add(i);
            }
        }

        return ret.stream().mapToInt(key -> Integer.valueOf(key)).toArray();
        // int[] ints = new int[ret.size()];
        // int count = 0;
        // for (Integer integer : ret) {
        //     ints[count] = integer;
        //     count++;
        // }
        // return ints;
    }

    /*
        暴力破解
     */
    public static int[] intersection2(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet<>();
        for (int i = 0; i < nums1.length; i++) {
            int value = nums1[i];
            for (int j = 0; j < nums2.length; j++) {
                if (value == nums2[j]) {
                    set.add(value);
                }
            }
        }

        int[] ints = new int[set.size()];
        int count = 0;
        for (Integer integer : set) {
            ints[count] = integer;
            count++;
        }
        return ints;
    }
}
